package com.ichoice.rabbitmq.rpc.helper.model;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @author xianrensawang
 * @since 2021/1/28
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CallBackModel implements Serializable {
    /**
     * 消息队列 ack唯一标志
     */
    private Long ack;
    /**
     * 状态码
     */
    private Integer code;
    /**
     * 返回结果
     */
    private Object res;

    /**
     * 时间
     */
    private String date;

    /**
     * 提示信息
     */
    private String message;

    /**
     * 回调函数
     */
    private String callBackBean;

    /**
     * 回调方法
     */
    private String callBackMethod;

    /**
     * 需要将消息发送到的服务对应名称
     */
    private String targetApplication;

    /**
     * 当前发起请求的客户端
     */
    private String currentApplication;
    /**
     * 被nack次数
     */
    private Long nackCount;

    public static CallBackModel success(Long ack, Object res) {
        return impl(ack, res, 200, "success");
    }

    public static CallBackModel fail(Long ack, String message) {
        return impl(ack, null, 500, message);
    }

    private static CallBackModel impl(Long ack, Object res, Integer code, String message) {
        return CallBackModel.builder()
                .ack(ack)
                .res(res)
                .message(message)
                .code(code)
                .date(DateUtil.now())
                .build();
    }

}
